﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DECOR.BL.BC;
using DECOR.BL.BE;
using System.Collections.Generic;
using System.Web.Script.Serialization;
using System.Collections.Specialized;
using Newtonsoft.Json;

namespace DECOR.Touchapp
{
    public partial class material : System.Web.UI.Page
    {
        string errMsg = string.Empty; string pRetval = string.Empty;
        string pCod = string.Empty; string pCodAnt = string.Empty; string pDesc = string.Empty;
        List<MaterialBE> lstMateriales = null;
        JavaScriptSerializer jss = null;
        string json = "";
        string pListaMat = string.Empty; //parametro desde sencha
        string pListaPed = string.Empty; //parametro desde sencha
        string pListaDes = string.Empty; //parametro desde sencha
        string pListaRep = string.Empty; //parametro desde sencha
        string pListaInt = string.Empty; //parametro desde sencha
        string op = "";  //parametro desde sencha
        string numPedido = "";  //parametro desde sencha
        string codigoMaterial = ""; //parametro desde sencha 
        string centro = "";
        string almacen = "";
        string lote = "";
        List<StockBE> lstStock = null;
        List<StockBE> lstStockEC = null;
        string fecImpStr = string.Empty;
        string uMedida = string.Empty;
        DateTime fecImp = new DateTime();
        decimal cantImp = 0m;
        string textoStock = "";
        string textoStockEC = "";
        string gvSectorVal = "00";
        string gvGrpVendVal = "100";
        private List<GenericBE> _lvLstCentros = new List<GenericBE>();
        private List<GenericBE> _lvLstAlmacenes = new List<GenericBE>();
        private List<GenericBE> _lvLstLotes = new List<GenericBE>();
        private List<StockBE> _lvLstCAL = new List<StockBE>();
        private string _lvCALSessKey = string.Empty;
        private readonly string _lvPreCALSessKey = "LstCAL";
        string pPosicion = "";
        string orgVentas = "";
        string canalDist = "";
        string jsonAll = "";
        string pTipoDoc = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Request.HttpMethod.Equals("POST"))
            {

            }
            else
            {
                CredencialesController.cargarInfo(Request.Params); //(SIEMPRE)
                //si viene null o vacio entonces traemos la lista de materiales.
                string leerDsctoLotes = Request.Params["dsctoLotes"]; //parametro desde sencha
                string añadirMaterial = Request.Params["añadirMat"];
                string añadirForm = Request.Params["añadirForm"];
                pTipoDoc = Request.Params["tipoDocumento"];
                pPosicion = Request.Params["pPosicion"];
                if (string.IsNullOrEmpty(leerDsctoLotes))
                {
                    //TRAEMOS TODOS LOS MATERIALES SEGUN LOS PARAMETROS INDICADOS
                    if (string.IsNullOrEmpty(añadirMaterial))
                    {
                        if (string.IsNullOrEmpty(añadirForm))
                        {
                            pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"materiales\":{2}, ";
                            pRetval += "\"lstCentros\": {3}, \"lstStock\": {4}, \"lstAlmacenes\": {5} ";
                            pRetval += "}";

                            pCod = Request.Params["codigo"] != null ? Request.Params["codigo"] : "";
                            pCodAnt = Request.Params["codigoAntiguo"] != null ? Request.Params["codigoAntiguo"] : "";
                            pDesc = Request.Params["descripcionMaterial"] != null ? Request.Params["descripcionMaterial"] : "";
                            orgVentas = Request.Params["OrgVentas"] != null ? Request.Params["OrgVentas"] : "";
                            canalDist = Request.Params["CanalDist"] != null ? Request.Params["CanalDist"] : "";
                            string usrid = Request.Params["UserId"] != null ? Request.Params["UserId"] : "";

                            try
                            {
                                lstMateriales = MaterialBC.Instance.buscarMateriales(pCod, pCodAnt, pDesc, "", orgVentas, canalDist, usrid);

                                if (lstMateriales != null && lstMateriales.Count > 0)
                                {
                                    //serializar salida
                                    pRetval = pRetval.Replace("{0}", "true");
                                    pRetval = pRetval.Replace("{1}", "");
                                    json = JsonConvert.SerializeObject(lstMateriales);
                                    pRetval = pRetval.Replace("{2}", json);
                                    //traemos los centros
                                    List<GenericBE> lstCentros = null;
                                    lstCentros = CentroBC.Instance.listar();
                                    json = JsonConvert.SerializeObject(lstCentros);
                                    pRetval = pRetval.Replace("{3}", json);
                                    //traemos stock
                                    cargarStockAñadirForm(pCod, orgVentas, canalDist);
                                    pRetval = pRetval.Replace("{4}", jsonAll);
                                    //traemos almacen
                                    List<GenericBE> lstAlmacenes = AlmacenBC.Instance.listar("");
                                    json = JsonConvert.SerializeObject(lstAlmacenes);
                                    pRetval = pRetval.Replace("{5}", json);

                                    errMsg = string.Empty;
                                    
                                }
                                else //enviar null
                                {
                                    pRetval = pRetval.Replace("{0}", "false");
                                    pRetval = pRetval.Replace("{1}", "No existe información");
                                    pRetval = pRetval.Replace("{2}", "null");
                                    pRetval = pRetval.Replace("{3}", "null");
                                    pRetval = pRetval.Replace("{4}", "null");
                                    pRetval = pRetval.Replace("{5}", "null");
                                }
                            }
                            catch (Exception ex)
                            {
                                errMsg = ex.Message;
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", errMsg);
                                pRetval = pRetval.Replace("{2}", "null");
                                pRetval = pRetval.Replace("{3}", "null");
                                pRetval = pRetval.Replace("{4}", "null");
                                pRetval = pRetval.Replace("{5}", "null");
                            }
                        }
                        else if (añadirForm == "2")
	                    {
                            pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"materiales\":{2}, ";
                            pRetval += "\"lstTotal\": {3}, ";
                            pRetval += "\"lstStock\": {4} ";
                            pRetval += "}";

                            orgVentas = Request.Params["OrgVentas"] != null ? Request.Params["OrgVentas"] : "";
                            canalDist = Request.Params["CanalDist"] != null ? Request.Params["CanalDist"] : "";
                            string usrid = Request.Params["UserId"] != null ? Request.Params["UserId"] : "";
                            string matAd = Request.Params["matAdic"] == null ? "" : Request.Params["matAdic"];
                            if (!string.IsNullOrEmpty(matAd))
                            {
                                MaterialBE objMatTMP = new MaterialBE();
                                List<MaterialBE> listMatTMP = new List<MaterialBE>();
                                decimal cantidad = 0;
                                foreach (EstructuraPosicinListaMateriales item in CargarMaterialesAdicionales(Request.Params["matAdic"])[0].PosicionListaMateriales)
                                {
                                    cantidad = item.Cantidad;
                                    lstMateriales = MaterialBC.Instance.buscarMateriales(item.Matnr, "", "", "", orgVentas, canalDist, usrid);
                                    objMatTMP = lstMateriales[0];
                                    listMatTMP.Add(objMatTMP);
                                }
                                if (listMatTMP != null && listMatTMP.Count > 0)
                                {
                                    //serializar salida
                                    pRetval = pRetval.Replace("{0}", "true");
                                    pRetval = pRetval.Replace("{1}", "");
                                    json = JsonConvert.SerializeObject(listMatTMP, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                                    pRetval = pRetval.Replace("{2}", json);

                                    string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
                                    PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                                    PedidoBE docTipo = lstPedido;
                                    List<DetalleBE> lstTotal = (docTipo.Detalle == null) ? new List<DetalleBE>() : docTipo.Detalle;

                                    int posNuevo = Request.Params["posNuevo"] != null ? Convert.ToInt32(Request.Params["posNuevo"]) : 0;
                                    
                                    List<DetalleBE> actualStore = JsonConvert.DeserializeObject<List<DetalleBE>>(json);
                                    foreach (DetalleBE detalleActual in actualStore)
                                    {
                                        detalleActual.Posicion = posNuevo.ToString();
                                        detalleActual.PrioridadEntrega = "03";
                                        decimal cant;
                                        if (detalleActual.ValorRendimiento == 0)
                                        {
                                            cant = cantidad;
                                        }
                                        else
                                        {
                                            cant = detalleActual.ValorRendimiento * cantidad;
                                        }
                                        detalleActual.Cantidad = cant;
                                        detalleActual.FechaCantConf = DateTime.Now;

                                        //List<MaterialBE> lstMat = JsonConvert.DeserializeObject<List<MaterialBE>>(json);
                                        //MaterialBE matTipo = lstMat.Last();
                                        //detalleActual.Material = matTipo;
                                        detalleActual.Material = listMatTMP.Find(x => x.CodMaterial.TrimStart('0') == detalleActual.CodMaterial.TrimStart('0'));
                                        lstTotal.Add(detalleActual);
                                        posNuevo += 10;
                                    }
                                    //DetalleBE detalleActual = actualStore.Last();
                                    

                                    //DetalleBE detalleObj = detalleActual;
                                    //int posi = Convert.ToInt16(detalleObj.Posicion);

                                    json = JsonConvert.SerializeObject(lstTotal);
                                    pRetval = pRetval.Replace("{3}", json);
                                    //pCod = Request.Params["codigo"] != null ? Request.Params["codigo"] : "";
                                    string stocktmp = "";
                                    foreach (MaterialBE itemM in listMatTMP)
                                    {
                                        jsonAll = "";
                                        cargarStockAñadirForm(itemM.CodMaterial, orgVentas, canalDist);
                                        jsonAll = jsonAll.Substring(1, jsonAll.Length - 1);
                                        jsonAll = jsonAll.Substring(0, jsonAll.Length - 1);
                                        stocktmp += "," + jsonAll;
                                    }
                                    stocktmp = stocktmp.Substring(1, stocktmp.Length - 1);
                                    pRetval = pRetval.Replace("{4}", "[" + stocktmp + "]");
                                }
                            }
	                    }
                        else
                        {
                            pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"materiales\":{2}, ";
                            pRetval += "\"lstTotal\": {3}, ";
                            pRetval += "\"lstStock\": {4}, ";
                            pRetval += "\"lstMatAdic\": {5} ";
                            //pRetval += "\"textoStockEC\": \"{6}\" ";
                            pRetval += "}";

                            pCod = Request.Params["codigo"] != null ? Request.Params["codigo"] : "";
                            pCodAnt = Request.Params["codigoAntiguo"] != null ? Request.Params["codigoAntiguo"] : "";
                            pDesc = Request.Params["descripcionMaterial"] != null ? Request.Params["descripcionMaterial"] : "";
                            orgVentas = Request.Params["OrgVentas"] != null ? Request.Params["OrgVentas"] : "";
                            canalDist = Request.Params["CanalDist"] != null ? Request.Params["CanalDist"] : "";
                            string usrid = Request.Params["UserId"] != null ? Request.Params["UserId"] : "";
                            decimal cantidad = Request.Params["cantidadtmp"] != null ? Convert.ToDecimal(Request.Params["cantidadtmp"]) : 0m;
                            try
                            {
                                //Materiales Adicionales 14.03.2013 rhuapaya
                                List<EnlaceMaterialBE> lstMatAd = new List<EnlaceMaterialBE>();
                                string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
                                PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                                PedidoBE docTipo = lstPedido;
                                lstMatAd = MaterialBC.Instance.buscarMaterialesAdicionales(pCod, "");
                                bool esOferta = ParametroBC.Instance.esTipoOferta(docTipo.CodTipoDoc);
                                
                                if (lstMatAd != null && lstMatAd.Count > 0 && !esOferta)
                                {
                                    foreach (EnlaceMaterialBE item in lstMatAd)
                                    {
                                        foreach (EstructuraPosicinListaMateriales itemZ in item.PosicionListaMateriales)
                                        {
                                            itemZ.Cantidad = cantidad;
                                        }   
                                    }


                                    pRetval = pRetval.Replace("{0}", "true");
                                    pRetval = pRetval.Replace("{1}", "");
                                    pRetval = pRetval.Replace("{2}", "null");
                                    pRetval = pRetval.Replace("{3}", "null");
                                    pRetval = pRetval.Replace("{4}", "null");
                                    json = JsonConvert.SerializeObject(lstMatAd, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                                    pRetval = pRetval.Replace("{5}", json);
                                }
                                else
                                {
                                    lstMateriales = MaterialBC.Instance.buscarMateriales(pCod, pCodAnt, pDesc, "", orgVentas, canalDist, usrid);

                                    if (lstMateriales != null && lstMateriales.Count > 0)
                                    {
                                        //serializar salida
                                        pRetval = pRetval.Replace("{0}", "true");
                                        pRetval = pRetval.Replace("{1}", "");
                                        json = JsonConvert.SerializeObject(lstMateriales, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                                        pRetval = pRetval.Replace("{2}", json);
                                        //cuando llegue acá materiales adicionales se coloca en null
                                        pRetval = pRetval.Replace("{5}", "null");
                                        
                                        List<DetalleBE> lstTotal = (docTipo.Detalle == null) ? new List<DetalleBE>() : docTipo.Detalle;

                                        string posNuevo = Request.Params["posNuevo"] != null ? Request.Params["posNuevo"] : "";
                                        List<DetalleBE> actualStore = JsonConvert.DeserializeObject<List<DetalleBE>>(json);
                                        DetalleBE detalleActual = actualStore.Last();
                                        detalleActual.Posicion = posNuevo;
                                        detalleActual.PrioridadEntrega = "03";
                                        decimal cant;
                                        if (detalleActual.ValorRendimiento == 0)
                                        {
                                            cant = cantidad; // 1;
                                        }
                                        else
                                        {
                                           // cant = detalleActual.ValorRendimiento * cantidad;

                                           // if (detalleActual.ValorRendimiento != 0m)
                                            //{
                                                decimal residuo = cantidad % detalleActual.ValorRendimiento, ajuste = 0m;
                                                if (residuo != 0) { ajuste = 1m; }
                                                decimal nuevaCant = (Math.Truncate(cantidad / detalleActual.ValorRendimiento) + ajuste) * detalleActual.ValorRendimiento;
                                                
                                                cant = nuevaCant;
                                            //}
                                            

                                        }
                                        detalleActual.Cantidad = cant;
                                        detalleActual.FechaCantConf = DateTime.Now;

                                        List<MaterialBE> lstMat = JsonConvert.DeserializeObject<List<MaterialBE>>(json);
                                        MaterialBE matTipo = lstMat.Last();
                                        detalleActual.Material = matTipo;

                                        lstTotal.Add(detalleActual);

                                        DetalleBE detalleObj = detalleActual;
                                        int posi = Convert.ToInt16(detalleObj.Posicion);

                                        if (ParametroBC.Instance.esTipoX(matTipo.Tipo, "TipoMatCombo") && lstMatAd.Count <= 0)
                                        {
                                            //buscar materiales asociados y añadirlos
                                            string pTipoPos = "";

                                            List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(docTipo.CodTipoDoc, matTipo.CodMaterial.PadLeft(18, '0'), docTipo.OrgVentas,
                                                              docTipo.CanalDist, out pTipoPos);
                                            detalleObj.TipoPosicion = pTipoPos.Equals("") ? detalleObj.TipoPosicion : pTipoPos;

                                            //--- si tiene elementos, entonces es un KIT o Combo
                                            foreach (DetalleBE item in lstDetalle)
                                            {
                                                item.DescMaterial = item.Material.DescMaterial;
                                                item.CodUMedida = item.Material.CodUMedida;
                                                item.Peso = item.Material.Peso;
                                                item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                                                item.ValorRendimiento = item.Material.ValorRendimiento;
                                                item.TipoMaterial = item.Material.TipoMaterial;

                                                posi += 10;
                                                item.Posicion = posi.ToString();
                                                item.PosSup = detalleObj.Posicion;

                                                item.Cantidad = item.CantComp * detalleObj.Cantidad;
                                                //si UM = UNidad => redondear al entero mayor
                                                if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                                                {
                                                    item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                                                }
                                                //--------------------
                                                if (item.Material == null)
                                                {
                                                    item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, docTipo.OrgVentas, docTipo.CanalDist);
                                                }
                                                //--- calcular rendimiento
                                                if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                                    ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                                                {
                                                    item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                                                    //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                                                }

                                                switch (detalleObj.TipoPosicion)
                                                {
                                                    case "Z011":
                                                        item.TipoPosicion = "Z012";
                                                        break;
                                                    case "Z016":
                                                        item.TipoPosicion = "Z017";
                                                        break;
                                                    case "Z007":
                                                        item.TipoPosicion = "Z008";
                                                        break;
                                                    case "Z014":
                                                        item.TipoPosicion = "Z015";
                                                        break;
                                                }

                                                //--- solo agregar los q no hayan sido agregados antes
                                                lstTotal.Add(item);
                                            }
                                            if (lstTotal != null || lstTotal.Count > 0)
                                            {
                                                json = JsonConvert.SerializeObject(lstTotal);
                                                pRetval = pRetval.Replace("{3}", json);
                                            }
                                            else
                                            {
                                                pRetval = pRetval.Replace("{3}", "null");
                                            }

                                            orgVentas = Request.Params["OrgVentas"] == null ? "" : Request.Params["OrgVentas"];
                                            canalDist = Request.Params["CanalDist"] == null ? "" : Request.Params["CanalDist"];

                                            //TRAEMOS LOS STOCK

                                            //*******************************************************
                                            //codigoMaterial = matTipo.CodMaterial.PadLeft(18, '0');
                                            codigoMaterial = lstTotal.First().CodMaterial.PadLeft(18, '0');
                                            if (lstTotal.Count > 1)
                                            {
                                                cargarStockAñadirForm(codigoMaterial, orgVentas, canalDist);
                                                for (var a = 1; a < lstTotal.Count; a++)
                                                {
                                                    cargarStockAll(lstTotal[a].CodMaterial, orgVentas, canalDist);
                                                }
                                                jsonAll = jsonAll.Replace(",,", ",");
                                                jsonAll = jsonAll.Replace("[,{", "[{");
                                                pRetval = pRetval.Replace("{4}", jsonAll);
                                            }
                                            else
                                            {
                                                cargarStockAñadirForm(codigoMaterial, orgVentas, canalDist);
                                                jsonAll = jsonAll.Replace(",,", ",");
                                                pRetval = pRetval.Replace("{4}", jsonAll);
                                            }
                                        }
                                        else //enviar null
                                        {
                                            json = JsonConvert.SerializeObject(lstTotal);
                                            pRetval = pRetval.Replace("{3}", json);
                                            //pRetval = pRetval.Replace("{4}", "[]");
                                            pCod = Request.Params["codigo"] != null ? Request.Params["codigo"] : "";
                                            //codigoMaterial = Request.Params["codigo"] != null ? Request.Params["codigo"] : "";
                                            cargarStockAñadirForm(pCod, orgVentas, canalDist);
                                            pRetval = pRetval.Replace("{4}", jsonAll);
                                        }
                                    }
                                    else
                                    {
                                        pRetval = pRetval.Replace("{0}", "false");
                                        pRetval = pRetval.Replace("{1}", "No se ha encontrado material con el código ingresado");
                                        pRetval = pRetval.Replace("{2}", "null");
                                        pRetval = pRetval.Replace("{3}", "null");
                                        pRetval = pRetval.Replace("{4}", "null");
                                        pRetval = pRetval.Replace("{5}", "null");
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                errMsg = ex.Message;
                                pRetval = pRetval.Replace("{0}", "false");
                                pRetval = pRetval.Replace("{1}", errMsg);
                                pRetval = pRetval.Replace("{2}", "null");
                                pRetval = pRetval.Replace("{3}", "null");
                                pRetval = pRetval.Replace("{4}", "null");
                                pRetval = pRetval.Replace("{5}", "null");
                            }
                        }
                    }
                    else
                    {
                        string objDetalle = Request.Params["objDetalle"] != null ? Request.Params["objDetalle"] : "";
                        string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
                        PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                        PedidoBE docTipo = lstPedido;
                        List<DetalleBE> lstDet = JsonConvert.DeserializeObject<List<DetalleBE>>(objDetalle, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                        DetalleBE detalleObj = lstDet.Last();
                        int posi = Convert.ToInt16(detalleObj.Posicion);
                        //******************************************************************
                        List<EnlaceMaterialBE> lstMatAd = new List<EnlaceMaterialBE>();
                        bool esOferta = ParametroBC.Instance.esTipoOferta(docTipo.CodTipoDoc);
                        lstMatAd = MaterialBC.Instance.buscarMaterialesAdicionales(detalleObj.CodMaterial, "");

                        if (lstMatAd != null && lstMatAd.Count > 0 && !esOferta)
                        {
                            pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"materiales\":{2}, ";
                            pRetval += "\"lstTotal\": {3}, ";
                            pRetval += "\"lstStock\": {4}, ";
                            pRetval += "\"lstMatAdic\": {5} ";
                            pRetval += "}";

                            pRetval = pRetval.Replace("{0}", "true");
                            pRetval = pRetval.Replace("{1}", "");
                            pRetval = pRetval.Replace("{2}", "null");
                            pRetval = pRetval.Replace("{3}", "null");
                            pRetval = pRetval.Replace("{4}", "null");
                            json = JsonConvert.SerializeObject(lstMatAd, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                            pRetval = pRetval.Replace("{5}", json);
                        }
                        //******************************************************************
                        else
                        {
                            List<DetalleBE> lstMateriales = (docTipo.Detalle == null) ? new List<DetalleBE>() : docTipo.Detalle;
                            string objMaterial = Request.Params["objMaterial"] != null ? Request.Params["objMaterial"] : "";
                            List<MaterialBE> lstMat = JsonConvert.DeserializeObject<List<MaterialBE>>(objMaterial);
                            MaterialBE matTipo = lstMat.First();
                            if (ParametroBC.Instance.esTipoX(matTipo.Tipo, "TipoMatCombo") && lstMatAd.Count <= 0)
                            {
                                //buscar materiales asociados y añadirlos
                                string pTipoPos = "";

                                List<DetalleBE> lstDetalle = PedidoBC.Instance.buscaTipoPosicion(docTipo.CodTipoDoc, matTipo.CodMaterial.PadLeft(18, '0'), docTipo.OrgVentas,
                                                  docTipo.CanalDist, out pTipoPos);
                                detalleObj.TipoPosicion = pTipoPos.Equals("") ? detalleObj.TipoPosicion : pTipoPos;

                                //--- si tiene elementos, entonces es un KIT o Combo
                                foreach (DetalleBE item in lstDetalle)
                                {
                                    item.DescMaterial = item.Material.DescMaterial;
                                    item.CodUMedida = item.Material.CodUMedida;
                                    item.Peso = item.Material.Peso;
                                    item.UMedidaRendimiendo = item.Material.UMedidaRendimiendo;
                                    item.ValorRendimiento = item.Material.ValorRendimiento;
                                    item.TipoMaterial = item.Material.TipoMaterial;

                                    posi += 10;
                                    item.Posicion = posi.ToString();
                                    item.PosSup = detalleObj.Posicion;

                                    item.Cantidad = item.CantComp * detalleObj.Cantidad;
                                    //si UM = UNidad => redondear al entero mayor
                                    if (ParametroBC.Instance.esTipoX(item.CodUMedida, "UMUnidad"))
                                    {
                                        item.Cantidad = (item.Cantidad > decimal.Truncate(item.Cantidad)) ? decimal.Truncate(item.Cantidad) + 1 : item.Cantidad;
                                    }
                                    //--------------------
                                    if (item.Material == null)
                                    {
                                        item.Material = MaterialBC.Instance.leerMaterial(item.CodMaterial, docTipo.OrgVentas, docTipo.CanalDist);
                                    }
                                    //--- calcular rendimiento
                                    if (!ParametroBC.Instance.esTipoX(item.Material.Tipo, "TipoMatServicio") &&
                                        ParametroBC.Instance.esTipoX(item.Material.UMedidaRendimiendo, "UMRendimiento"))
                                    {
                                        item.Cantidad = PedidoBC.Instance.calculaRendimiento(item.Cantidad, item.ValorRendimiento); //rgutierrez 15.11.2011
                                        //item.Cantidad = this.calculaRendimiento(item.Cantidad, item.ValorRendimiento);
                                    }

                                    switch (detalleObj.TipoPosicion)
                                    {
                                        case "Z011":
                                            item.TipoPosicion = "Z012";
                                            break;
                                        case "Z016":
                                            item.TipoPosicion = "Z017";
                                            break;
                                        case "Z007":
                                            item.TipoPosicion = "Z008";
                                            break;
                                        case "Z014":
                                            item.TipoPosicion = "Z015";
                                            break;
                                    }

                                    //--- solo agregar los q no hayan sido agregados antes
                                    lstMateriales.Add(item);
                                }
                            }
                            pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, \"materiales\":{2}, ";
                            pRetval += "\"lstStock\": {3} ";
                            pRetval += "}";
                            pRetval = pRetval.Replace("{0}", "true");
                            pRetval = pRetval.Replace("{1}", "");
                            json = JsonConvert.SerializeObject(lstMateriales);
                            pRetval = pRetval.Replace("{2}", json);

                            orgVentas = Request.Params["OrgVentas"] == null ? "" : Request.Params["OrgVentas"];
                            canalDist = Request.Params["CanalDist"] == null ? "" : Request.Params["CanalDist"];

                            //TRAEMOS LOS STOCK
                            //*******************************************************
                            //añadir un nuevo material
                            //*******************************************************                    
                            numPedido = Request.Params["numPedido"] != null ? Request.Params["numPedido"] : "";
                            codigoMaterial = matTipo.CodMaterial.PadLeft(18, '0');
                            op = Request.Params["op"] != null ? Request.Params["op"] : "";

                            if (lstMateriales.Count > 0)
                            {
                                cargarStockAñadir(detalleObj.CodMaterial, orgVentas, canalDist);
                                foreach (DetalleBE mat in lstMateriales)
                                {
                                    cargarStockAll(mat.CodMaterial, orgVentas, canalDist);
                                }
                                pRetval = pRetval.Replace("{3}", jsonAll);
                            }
                            else
                            {
                                cargarStockAñadir(detalleObj.CodMaterial, orgVentas, canalDist);
                                pRetval = pRetval.Replace("{3}", jsonAll);
                            }
                        }
                    }
                }
                else
                {
                    orgVentas = Request.Params["OrgVentas"] == null ? "" : Request.Params["OrgVentas"];
                    canalDist = Request.Params["CanalDist"] == null ? "" : Request.Params["CanalDist"];

                    //TRAEMOS LOS STOCK
                    
                    //*******************************************************
                    //añadir un nuevo material
                    //*******************************************************                    
                    numPedido = Request.Params["numPedido"] != null ? Request.Params["numPedido"] : "";
                    codigoMaterial = Request.Params["codigoMaterial"] != null ? Request.Params["codigoMaterial"] : "";
                    op = Request.Params["op"] != null ? Request.Params["op"] : "";

                    if (leerDsctoLotes == "1")
                    {
                        pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, ";
                        pRetval += "\"lstLoteTotal\": {2}, ";
                        pRetval += "\"textoStock\": \"{3}\", ";
                        pRetval += "\"textoStockEC\": \"{4}\" ";
                        pRetval += "}";
                        ////convertimos la cadena material a objetomaterial
                        MaterialBE objM = null;
                        //verificar si se tiene q traer centro almacen y lote.
                        objM = CargarDatosMaterial2(codigoMaterial);
                        TraerStock2(objM);
                    }
                    else if (leerDsctoLotes == "0")
                    {
                        pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, ";
                        pRetval += "\"lstStock\": {2}, ";
                        pRetval += "\"textoStock\": \"{3}\", ";
                        pRetval += "\"textoStockEC\": \"{4}\" ";
                        pRetval += "}";

                        cargarStock(codigoMaterial, orgVentas, canalDist);
                    }
                    else if (leerDsctoLotes == "2")
                    {
                        pRetval = "{\"success\": {0}, \"errors\":{\"reason\": \"{1}\"}, ";
                        pRetval += "\"objPedido\": {2} ";
                        pRetval += "}";
                        string cadenaPedido = Request.Params["listaPedJson"] != null ? Request.Params["listaPedJson"] : "";
                        string tempcadenaPedido = Request.Params["listaPedJson"] != null ? Request.Params["listaPedJson"] : "";
                        string cadenaMaterial = Request.Params["listaMatJson"] != null ? Request.Params["listaMatJson"] : "";
                        string codcli = recuperarCodigoCliente(tempcadenaPedido);
                        string descuentos = Request.Params["listaDsctoJson"] != null ? Request.Params["listaDsctoJson"] : "";
                        string repartos = Request.Params["listaRepartosJson"] != null ? Request.Params["listaRepartosJson"] : "";
                        string inter = Request.Params["listaInterJson"] != null ? Request.Params["listaInterJson"] : "";

                        if (cadenaPedido.Trim().Length > 0)
                        {
                            PedidoBE objP = null;
                            List<PedidoBE> lstPed = JsonConvert.DeserializeObject<List<PedidoBE>>(cadenaPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                            List<DetalleBE> lstDet = JsonConvert.DeserializeObject<List<DetalleBE>>(cadenaMaterial);
                            List<MaterialBE> lstMat = JsonConvert.DeserializeObject<List<MaterialBE>>(cadenaMaterial);
                            List<DescuentoBE> lstDesc = JsonConvert.DeserializeObject<List<DescuentoBE>>(descuentos);
                            List<RepartoBE> lstRep = JsonConvert.DeserializeObject<List<RepartoBE>>(repartos);
                            //lstPed[0].Detalle.RemoveAt(0);
                            PedidoBE pObjPedido = null;
                            pObjPedido = Convertir_Cadena_a_Pedido2(cadenaPedido, inter, repartos, descuentos, cadenaMaterial);
                            //decimal dsctoMontoTot = 0m;
                            pObjPedido.CodCliente = codcli;
                            objP = CargarDatosMaterial(pObjPedido);

                            foreach (DetalleBE item in objP.Detalle)
                            {
                                List<CondicionBE> lstCon = ObtenerCondicionesDescuentos(objP, item);
                            }
                            //traemos los lotes rhuapaya 03.07.2012 @@@
                            cargarLotesAMaterial(objP);
                            if (objP != null)
                            {
                                pRetval = pRetval.Replace("{0}", "true");
                                pRetval = pRetval.Replace("{1}", "");
                                json = JsonConvert.SerializeObject(objP);
                                pRetval = pRetval.Replace("{2}", json);
                            }
                            else
                            {
                                pRetval = pRetval.Replace("{0}", "true");
                                pRetval = pRetval.Replace("{1}", "No se encontraron registros.");
                                pRetval = pRetval.Replace("{2}", "");
                            }
                        }
                        else
                        {
                            pRetval = pRetval.Replace("{0}", "true");
                            pRetval = pRetval.Replace("{1}", "No se encontraron registros a recalcular.");
                            pRetval = pRetval.Replace("{2}", "null");
                        }
                    }
                    else
                    {
                        
                    }
                }

                Response.ContentType = "application/json; charset=UTF-8";
                //pRetval = "";
                Response.Write(pRetval);
            }
        }

        private PedidoBE CargarDatosMaterial(PedidoBE pObjPedido)
        {
            bool pedConMatServ = false;
            if (!ParametroBC.Instance.esTipoX(pObjPedido.CodTipoDoc, "CodMuestraGratis") &&
                    !ParametroBC.Instance.esTipoX(pObjPedido.CodTipoDoc, "CodMuestraGarantia"))
            {
                foreach (DetalleBE objDetalle in pObjPedido.Detalle)
                {
                    //if (objDetalle.CodCentro.TrimStart('0') == "9160")
                    //{
                    //    pRetval = pRetval.Replace("{0}", "false");
                    //    pRetval = pRetval.Replace("{1}", "No se permite asignar stock del 9160:LIMASA.");
                    //    return pObjPedido;
                    //}
                    MaterialBE objMat = null;                    
                    objMat = MaterialBC.Instance.leerMaterial(objDetalle.CodMaterial, pObjPedido.OrgVentas, pObjPedido.CanalDist);
                    objDetalle.Material = objMat;
                   
                    //si UM = UNidad => redondear al entero mayor
                    if (ParametroBC.Instance.esTipoX(objDetalle.CodUMedida, "UMUnidad"))
                    {
                        objDetalle.Cantidad = (objDetalle.Cantidad > decimal.Truncate(objDetalle.Cantidad)) ? decimal.Truncate(objDetalle.Cantidad) + 1 : objDetalle.Cantidad;
                    }
                    //--- calcular rendimiento
                    if (!ParametroBC.Instance.esTipoX(objDetalle.Material.Tipo, "TipoMatServicio") &&
                        ParametroBC.Instance.esTipoX(objDetalle.Material.UMedidaRendimiendo, "UMRendimiento"))
                    {
                        objDetalle.Cantidad = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                        if (objMat.TieneServ)
                        {
                            pedConMatServ = true;
                        }
                    }
                    //if (objMat != null &&
                    //    !ParametroBC.Instance.esTipoX(objMat.Tipo, "TipoMatServicio") &&
                    //    ParametroBC.Instance.esTipoX(objMat.UMedidaRendimiendo, "UMRendimiento"))
                    //{
                    //    decimal nuevaCant = PedidoBC.Instance.calculaRendimiento(objDetalle.Cantidad, objDetalle.ValorRendimiento); //rgutierrez 15.11.2011
                    //    objDetalle.Cantidad = nuevaCant;
                    //    if (objMat.TieneServ)
                    //    {
                    //        pedConMatServ = true;
                    //    }
                    //}
                }
            }
            PedidoBC.Instance.ActualizarPosiciones(pObjPedido);
            this.BuscarPrecios(pObjPedido);
            return pObjPedido;
        }

        private PedidoBE BuscarPrecios(PedidoBE _objPed)
        {
            PedidoBE _lvObjPedido = _objPed;
            // valida q hayan datos necesarios
            if (!gvGrpVendVal.Equals(string.Empty) && int.Parse(_objPed.CodOficina == "" ? "0" : _objPed.CodOficina) >= 0 &&
                !_objPed.CodTipoDoc.Trim().Equals("") && int.Parse(_objPed.OrgVentas) >= 0 &&
                int.Parse(_objPed.CanalDist) >= 0 && !_objPed.CodCliente.Trim().Equals(""))
            {
                PedidoBC objPBC = PedidoBC.Instance;
                //if (hidDescuentoTotal.Value != "")
                //{
                //    objPBC.DescuentoTotal = Convert.ToDecimal(hidDescuentoTotal.Value);
                //}
                string retMsg = objPBC.cargarCondiciones(ref _lvObjPedido);

                if (retMsg != string.Empty)
                {
                    //Session["Mensaje"] = retMsg;
                }
                else
                {

                }
            }

            return _lvObjPedido;
        }

        private void TraerStock(PedidoBE _objPed, List<DetalleBE> _objDet)
        {
            string numPedidoModif = string.Empty;
            string numPosModif = string.Empty;

            foreach (DetalleBE item in _objDet)
            {
                if (item.Posicion == pPosicion)
                {
                    if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                    {
                        numPedidoModif = _objPed.NumPedido;
                        numPosModif = item.Posicion;
                    }

                    this._lvLstCentros = new List<GenericBE>();
                    this._lvLstAlmacenes = new List<GenericBE>();
                    this._lvLstLotes = new List<GenericBE>();

                    decimal pCantTot = _objDet.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(item.Posicion))
                                                                && (X.CodMaterial == item.CodMaterial)
                                                                && (X.CodAlmacen == item.CodAlmacen)
                                                                && (X.CodCentro == item.CodCentro)
                                                                && (X.CodLote == item.CodLote)).Sum(Y => Y.Cantidad);
                    pCantTot += item.Cantidad;
                    this._lvLstCAL = ParametroBC.Instance.getDataLotes(item.Material.CodMaterial, pCantTot, item.CodCentro,
                            item.CodAlmacen, item.CodLote, numPedidoModif, numPosModif, _objPed.OrgVentas, _objPed.CanalDist);
                    _lvCALSessKey = _lvPreCALSessKey + item.PosicionCorto;

                    DistribuirCAL(item.CodCentro, item.CodAlmacen, _lvLstCAL, ref _lvLstCentros, ref _lvLstAlmacenes, ref _lvLstLotes);
                    item.lstCentros = _lvLstCentros;
                    item.lstAlmacen = _lvLstAlmacenes;
                    item.lstLotes = _lvLstLotes;

                
                    if (_lvLstCAL != null || _lvLstCAL.Count > 0)
                    {
                        json = JsonConvert.SerializeObject(_lvLstCAL);
                        pRetval = pRetval.Replace("{10}", json);
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{10}", "null");
                    } 
                }
            }
        }

        /// <summary>
        /// nuevo método para distribuir StockBE en CAL
        /// </summary>
        /// <param name="selCentro">Centro seleccionado</param>
        /// <param name="selAlm">Alm seleccionado</param>
        /// <param name="list">lista stockbe</param>
        /// <param name="lstCentro">ref lista centro</param>
        /// <param name="lstAlmacen">ref lista alm</param>
        /// <param name="lstLote">ref lista lot</param>
        
        private void DistribuirCAL(string selCentro, string selAlm, List<StockBE> list, ref List<GenericBE> lstCentro, ref List<GenericBE> lstAlmacen, ref List<GenericBE> lstLote)
        {
            lstCentro.Clear(); lstAlmacen.Clear(); lstLote.Clear();
            string charSep = ParametroBC.Instance.getParamValue("charSep");
            GenericBE objItem, objAux;
            List<StockBE> lstAux;

            //Añadir todos los centros
            foreach (StockBE obj in list)
            {
                objAux = null;
                objAux = lstCentro.Find(X => X.Codigo == obj.CodCentro);
                if (objAux == null)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodCentro;
                    objAux.Descripcion = obj.CodCentro + charSep + obj.DescCentro;
                    lstCentro.Add(objAux);
                }
            }
            if (string.IsNullOrEmpty(selCentro) && lstCentro.Count > 0)
            {
                selCentro = lstCentro[0].Codigo;
            }
            //Añadir almacenes para el centro
            lstAux = list.FindAll(X => X.CodCentro == selCentro);
            foreach (StockBE obj in lstAux)
            {
                objAux = null;
                objAux = lstAlmacen.Find(X => X.Codigo == obj.CodAlmacen);
                if (objAux == null)
                {
                    objAux = new GenericBE();
                    objAux.Codigo = obj.CodAlmacen;
                    objAux.Descripcion = obj.DescAlmacen; //obj.CodAlmacen + charSep + obj.DescAlmacen;
                    lstAlmacen.Add(objAux);
                }
            }
            if (string.IsNullOrEmpty(selAlm) && lstAlmacen.Count > 0)
            {
                selAlm = lstAlmacen[0].Codigo;
            }
            //Añadir lotes para el centro/almacen
            //rgutierrez 29.12.2011
            lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && !ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial"));
            //lstAux = list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty));

            //ordenar de menor a mayor para dejar el lote óptimo en la primera posición
            lstAux.Sort(delegate(StockBE p1, StockBE p2) { return p1.StockDisponible.CompareTo(p2.StockDisponible); });

            lstAux.AddRange(list.FindAll(X => X.CodCentro == selCentro && X.CodAlmacen == selAlm && !X.CodLote.Equals(string.Empty) && ParametroBC.Instance.esTipoX(X.ValorCaracteristica, "LoteComercial")));

            foreach (StockBE obj in lstAux)
            {
                objAux = new GenericBE();
                objAux.Codigo = obj.CodLote;
                objAux.Descripcion = obj.CodLote + charSep + "Stk = " + string.Format("{0:0,0.0}", obj.StockDisponible);

                lstLote.Add(objAux);
            }

            if (lstLote.Count > 0)
            {
                json = JsonConvert.SerializeObject(lstLote);
                pRetval = pRetval.Replace("{11}", json);
            }
            else
            {
                pRetval = pRetval.Replace("{11}", "null");
            }
        }

        private void cargarStockAñadirForm(string _codmat, string orgVta, string canal)
        {
            StockBE objStock = new StockBE();
            objStock.CodMaterial = _codmat;
            if (centro != string.Empty)
            {
                objStock.CodCentro = centro;
            }
            if (almacen != string.Empty)
            {
                objStock.CodAlmacen = almacen;
            }
            if (!orgVta.Equals(string.Empty))
            {
                objStock.OrgVentas = orgVta;
            }
            if (!canal.Equals(string.Empty))
            {
                objStock.CanalDist = canal;
            }

            lstStock = new List<StockBE>();
            List<StockBE>  lstStockaux = new List<StockBE>();
            StockBE itm = new StockBE();
            string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
            PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

            lstStock = ParametroBC.Instance.getDataLotes(_codmat, 0m, centro, almacen, "", "", "", orgVta, canal);
            if (lstPedido != null)
            {
                if (lstPedido.CodTipoDoc == "Z034")
                {
                    foreach (StockBE item in lstStock)
                    {
                        if (item.CodCentro == "9110" && item.CodAlmacen == "0001")
                        {
                            item.CodLote = "";
                            item.StockDisponible = 0;
                            lstStockaux.Add(item);
                        }
                        itm = item;
                    }
                    if (lstStockaux.Count == 0)
                    {

                        itm.CodMaterial = _codmat;
                        itm.CodCentro = "9110";
                        itm.DescCentro = "Distribución";
                        itm.CodAlmacen = "0001";
                        itm.DescAlmacen = "Tienda";
                        itm.CodLote = "";
                        itm.StockDisponible = 0;
                        lstStockaux.Add(itm);
                    }
                    Session["TipoDoc"] = "Z034";
                    lstStock = lstStockaux;
                }
            }
            
            if (lstStock != null || lstStock.Count > 0)
            {
                json = JsonConvert.SerializeObject(lstStock);
                jsonAll = json;
            }
            else
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "null");
                pRetval = pRetval.Replace("{3}", "");
                return;
            }

        }

        private void cargarStockAll(string codMat, string orgVta, string canal)
        {
            lstStock = new List<StockBE>();
            lstStock = ParametroBC.Instance.getDataLotes(codMat, 0m, centro, almacen, "", "", "", orgVta, canal);
            StockBE itm = new StockBE();
            List<StockBE> lstStockaux = new List<StockBE>();
            string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
            PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            if (lstPedido.CodTipoDoc == "Z034")
            {
                foreach (StockBE item in lstStock)
                {
                    if (item.CodCentro == "9110" && item.CodAlmacen == "0001")
                    {
                        item.CodLote = "";
                        item.StockDisponible = 0;
                        lstStockaux.Add(item);
                    }
                    itm = item;
                }
                if (lstStockaux.Count == 0)
                {

                    itm.CodMaterial = codMat;
                    itm.CodCentro = "9110";
                    itm.DescCentro = "Distribución";
                    itm.CodAlmacen = "0001";
                    itm.DescAlmacen = "Tienda";
                    itm.CodLote = "";
                    itm.StockDisponible = 0;
                    lstStockaux.Add(itm);
                }
                lstStock = lstStockaux;
                Session["TipoDoc"] = "Z034";
            }
            if (lstStock != null)
            {
                if (lstStock.Count > 0)
                {
                    json = JsonConvert.SerializeObject(lstStock);
                    jsonAll = jsonAll.Remove(jsonAll.Length - 1, 1) + ',' + json.Remove(0, 1);
                }
            }
        }

        private void cargarStockAñadir(string _codmat, string orgVta, string canal)
        {
            StockBE objStock = new StockBE();
            objStock.CodMaterial = _codmat;
            if (centro != string.Empty)
            {
                objStock.CodCentro = centro;
            }
            if (almacen != string.Empty)
            {
                objStock.CodAlmacen = almacen;
            }
            if (!orgVta.Equals(string.Empty))
            {
                objStock.OrgVentas = orgVta;
            }
            if (!canal.Equals(string.Empty))
            {
                objStock.CanalDist = canal;
            }

            lstStock = new List<StockBE>();
            lstStock = ParametroBC.Instance.getDataLotes(_codmat, 0m, centro, almacen, "", "", "", orgVta, canal);

            if (lstStock != null || lstStock.Count > 0)
            {
                json = JsonConvert.SerializeObject(lstStock);
                jsonAll = json;
            }
            else
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "null");
                pRetval = pRetval.Replace("{3}", "");
                return;
            }

        }

        private void cargarStock(string _codmat, string orgVta, string canal)
        {
            StockBE objStock = new StockBE();
            objStock.CodMaterial = _codmat;
            if (centro != string.Empty)
            {
                objStock.CodCentro = centro;
            }
            if (almacen != string.Empty)
            {
                objStock.CodAlmacen = almacen;
            }
            if (!orgVta.Equals(string.Empty))
            {
                objStock.OrgVentas = orgVta;
            }
            if (!canal.Equals(string.Empty))
            {
                objStock.CanalDist = canal;
            }

            lstStock = new List<StockBE>();
            lstStock = ParametroBC.Instance.getDataLotes(_codmat, 0m, centro, almacen, "", "", "", orgVta, canal);

            if (lstStock != null || lstStock.Count > 0)
            {
                json = JsonConvert.SerializeObject(lstStock);
                pRetval = pRetval.Replace("{0}", "true");
                pRetval = pRetval.Replace("{1}", "");
                pRetval = pRetval.Replace("{2}", json);

                //StockEC
                lstStockEC = new List<StockBE>();
                //lstStockEC = StockBC.Instance.buscarStockEC(objStock);
                foreach (StockBE obj in lstStockEC)
                {
                    if (obj.FechaStock >= DateTime.Today)
                    {
                        fecImp = obj.FechaStock;
                        cantImp = obj.StockDisponible;
                        uMedida = obj.UMB;
                        break;
                    }
                }
                fecImpStr = string.Format("{0:dd/MM/yyyy}", fecImp);
                foreach (StockBE item in lstStock)
                {
                    item.sStockDisponible = item.StockDisponible.ToString();
                }
                //Solo queda un nombre por centro
                for (int i = 0; i < lstStock.Count - 1; i++)
                {
                    string DescCentro = lstStock[i].DescCentro;
                    for (int j = i + 1; j <= lstStock.Count - 1; j++)//elimino los nombres de los centros repetidos
                    {
                        if (DescCentro.Equals(lstStock[j].DescCentro))
                            lstStock[j].DescCentro = "";
                        else
                            break;
                    }
                    string DescAlmacen = lstStock[i].DescAlmacen;
                    for (int j = i + 1; j <= lstStock.Count - 1; j++)//elimino los nombres de los Desc de Almacen repetidos
                    {
                        if (DescAlmacen.Equals(lstStock[j].DescAlmacen) && lstStock[i].CodCentro.Equals(lstStock[j].CodCentro))
                            lstStock[j].DescAlmacen = "";
                        else
                            DescAlmacen = lstStock[j].DescAlmacen;
                    }
                }

                if (lstStock.Count > 0)
                {
                    string mDesc = lstStock[0].DescMaterial;
                    mDesc = mDesc.Replace("\"", "").Replace("\'", "");
                    decimal tDisp = lstStock.Sum(X => X.StockDisponible);

                    if (cantImp > 0m)
                    {
                        textoStockEC = string.Format("IMPORTACIÓN POR LLEGAR AL {0} : {1} {2}", fecImpStr, cantImp, uMedida);
                        textoStockEC = textoStockEC.Replace("\"", "").Replace("\'", "");
                        pRetval = pRetval.Replace("{4}", textoStockEC);
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{4}", "");    //borrar la descripcion, debe ser vacia
                    }
                    textoStock = "Stock : " + _codmat + " - " + mDesc + " - Disponible Total = " + tDisp.ToString();
                    if (string.IsNullOrEmpty(textoStock))
                    {
                        pRetval = pRetval.Replace("{3}", "");
                    }
                    else
                    {
                        pRetval = pRetval.Replace("{3}", textoStock);
                    }
                }
            }
            else
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "null");
                pRetval = pRetval.Replace("{2}", "");
                return;
            }
            
        }

        private List<CondicionBE> ObtenerCondicionesDescuentos(PedidoBE oPed, DetalleBE oPedDet)
        {
            oPed.Sector = "00";
            string _lote = "";
            if (_lvLstLotes.Count > 0 && oPedDet.CodLote == "")
            {
                _lote = _lvLstLotes[0].Codigo;
            }
            else if (oPedDet.CodLote != "")
            {
                _lote = oPedDet.CodLote;
            }
            else
            {
                _lote = "";
            }

            oPedDet.CodLote = _lote;

            string retVal;
            List<CondicionBE> lstDctos = CondicionBC.Instance.ObtenerCondiciones(oPed, oPedDet, out retVal);

            if (lstDctos.Count > 0)
            {
                foreach (CondicionBE item in lstDctos)
                {
                    if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                    {
                        item.Importe = oPedDet.DctoDecorPorc.Importe;
                        item.Valor = oPedDet.DctoDecorPorc.Valor;
                        oPedDet.DctoDecorPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoDecorPorc.esPorcentaje = true;
                        oPedDet.DctoDecorPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                    {
                        item.Importe = oPedDet.DctoAdicionalPorc.Importe;
                        item.Valor = oPedDet.DctoAdicionalPorc.Valor;
                        oPedDet.DctoAdicionalPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoAdicionalPorc.esPorcentaje = true;
                        oPedDet.DctoAdicionalPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                    {
                        item.Importe = oPedDet.DctoEstadisticoPorc.Importe;
                        item.Valor = oPedDet.DctoEstadisticoPorc.Valor;
                        oPedDet.DctoEstadisticoPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoEstadisticoPorc.esPorcentaje = true;
                        oPedDet.DctoEstadisticoPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                    {
                        item.Importe = oPedDet.DctoGerenciaPorc.Importe;
                        item.Valor = oPedDet.DctoGerenciaPorc.Valor;
                        oPedDet.DctoGerenciaPorc.Denominacion = item.Denominacion;
                        oPedDet.DctoGerenciaPorc.esPorcentaje = true;
                        oPedDet.DctoGerenciaPorc.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                    {
                        item.Importe = oPedDet.DctoGerenciaMonto.Importe;
                        item.Valor = oPedDet.DctoGerenciaMonto.Valor;
                        oPedDet.DctoGerenciaMonto.Denominacion = item.Denominacion;
                        oPedDet.DctoGerenciaMonto.esPorcentaje = true;
                        oPedDet.DctoGerenciaMonto.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondZD06"))
                    {
                        item.Importe = oPedDet.DctoZD06.Importe;
                        item.Valor = oPedDet.DctoZD06.Valor;
                        oPedDet.DctoZD06.Denominacion = item.Denominacion;
                        oPedDet.DctoZD06.esPorcentaje = true;
                        oPedDet.DctoZD06.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                    {
                        item.Importe = oPedDet.DctoGenerico.Importe;
                        item.Valor = oPedDet.DctoGenerico.Valor;
                        oPedDet.DctoGenerico.Denominacion = item.Denominacion;
                        oPedDet.DctoGenerico.esPorcentaje = true;
                        oPedDet.DctoGenerico.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondZD11"))
                    {
                        item.Importe = oPedDet.DctoZD11.Importe;
                        item.Valor = oPedDet.DctoZD11.Valor;
                        oPedDet.DctoZD11.Denominacion = item.Denominacion;
                        oPedDet.DctoZD11.esPorcentaje = true;
                        oPedDet.DctoZD11.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                    {
                        item.Importe = oPedDet.DsctoAdicionalZD12.Importe;
                        item.Valor = oPedDet.DsctoAdicionalZD12.Valor;
                        oPedDet.DsctoAdicionalZD12.Denominacion = item.Denominacion;
                        oPedDet.DsctoAdicionalZD12.esPorcentaje = true;
                        oPedDet.DsctoAdicionalZD12.LimiteInferior = item.LimiteInferior;
                    }
                    else if (item.ClaseCondicion == "ZP08")
                    {
                        item.Importe = oPedDet.PreZP08.Importe;
                        item.Valor = oPedDet.PreZP08.Valor;
                        oPedDet.PreZP08.Denominacion = item.Denominacion;
                        oPedDet.PreZP08.esPorcentaje = false;
                        oPedDet.PreZP08.LimiteInferior = item.LimiteInferior;
                    }
                }                
            }
            return lstDctos;
        }

        private MaterialBE CargarDatosMaterial2(string codmat)
        {
            bool pedConMatServ = false;
            MaterialBE objMat = null;
            if (!string.IsNullOrEmpty(codmat))
            {
                objMat = MaterialBC.Instance.leerMaterial(codmat, orgVentas, canalDist);
            }

            return objMat;
        }

        private void TraerStock2(MaterialBE _objM)
        {
            string numPedidoModif = string.Empty;
            string numPosModif = Request.Params["pPosicion"] != null ? Request.Params["pPosicion"] : "";

            if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
            {
                numPedidoModif = Request.Params["numPedido"] != null ? Request.Params["numPedido"] : "";
                numPosModif = Request.Params["pPosicion"] != null ? Request.Params["pPosicion"] : "";
            }

            this._lvLstCentros = new List<GenericBE>();
            this._lvLstAlmacenes = new List<GenericBE>();
            this._lvLstLotes = new List<GenericBE>();

            decimal pCantTot = Request.Params["cantidad"] != null ? Convert.ToDecimal(Request.Params["cantidad"]) : 0m;

            this._lvLstCAL = ParametroBC.Instance.getDataLotes(_objM.CodMaterial, pCantTot, centro,
                    almacen, lote, numPedidoModif, numPosModif, orgVentas, canalDist);
            _lvCALSessKey = _lvPreCALSessKey + numPosModif.TrimStart('0');

            //MTEJADA:06.03.2013: EF 227------------------------------------------
            StockBE itm = new StockBE();
            List<StockBE> lstStockaux = new List<StockBE>();
            string Tipodoc = Session["TipoDoc"] == null ? "" : Session["TipoDoc"].ToString();
            string objPedido = Request.Params["objPedido"] != null ? Request.Params["objPedido"] : "";
            PedidoBE lstPedido = JsonConvert.DeserializeObject<PedidoBE>(objPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            if (Tipodoc == "Z034")
            {
                foreach (StockBE item in this._lvLstCAL)
                {
                    itm = item;
                    if (item.CodCentro == "9110" && item.CodAlmacen == "0001")

                    {
                        item.CodLote = "";
                        item.StockDisponible = 0;
                        lstStockaux.Add(item);
                        break;
                    }
                }
                if (lstStockaux.Count == 0)
                {

                    itm.CodMaterial = _objM.CodMaterial;
                    itm.CodCentro = "9110";
                    itm.DescCentro = "Distribución";
                    itm.CodAlmacen = "0001";
                    itm.DescAlmacen = "Tienda";
                    itm.CodLote = "";
                    itm.StockDisponible = 0;
                    lstStockaux.Add(itm);

                    Session["TipoDoc"] = "Z034";
                }
                this._lvLstCAL = lstStockaux;
            }
            //-----------------------------------------

            DistribuirCAL(centro, almacen, _lvLstCAL, ref _lvLstCentros, ref _lvLstAlmacenes, ref _lvLstLotes);
            
            if (_lvLstCAL != null || _lvLstCAL.Count > 0)
            {
                json = JsonConvert.SerializeObject(_lvLstCAL);
                pRetval = pRetval.Replace("{0}", "true");
                pRetval = pRetval.Replace("{1}", "");
                pRetval = pRetval.Replace("{2}", json);
            }
            else
            {
                pRetval = pRetval.Replace("{0}", "false");
                pRetval = pRetval.Replace("{1}", "No se encontró información.");
                pRetval = pRetval.Replace("{2}", "null");
            }
            //para el stock en curso
            StockBE objStock = new StockBE();
            objStock.CodMaterial = _objM.CodMaterial;

            List<StockBE> lstStockEC = new List<StockBE>();
            //lstStockEC = StockBC.Instance.buscarStockEC(objStock);
            
            if (lstStockEC.Count > 0)
            {
                foreach (StockBE obj in lstStockEC)
                {
                    if (obj.FechaStock >= DateTime.Today)
                    {
                        fecImp = obj.FechaStock;
                        cantImp = obj.StockDisponible;
                        uMedida = obj.UMB;
                        break;
                    }
                }
                fecImpStr = string.Format("{0:dd/MM/yyyy}", fecImp);
                string mDesc = _objM.DescMaterial;

                if (cantImp > 0m)
                {
                    textoStockEC = string.Format("IMPORTACIÓN POR LLEGAR AL {0} : {1} {2}", fecImpStr, cantImp, uMedida);
                    pRetval = pRetval.Replace("{4}", textoStockEC);
                }
                else
                {
                    pRetval = pRetval.Replace("{4}", "");
                }                
            }
        }

        private string recuperarCodigoCliente(string _CabPedido)
        {
            List<ClienteBE> objC = new List<ClienteBE>();
            objC = JsonConvert.DeserializeObject<List<ClienteBE>>(_CabPedido);
            string codCli = "";
            if (objC != null)
            {
                codCli = objC[0].codigoCliente;
            }
            return codCli;
            //string codigoCli = "";
            //_CabPedido = _CabPedido.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("}", "").Replace("]", "");

            //string[] objCab = _CabPedido.Split(',');
            //foreach (var itemStr in objCab)
            //{
            //    if (itemStr.Trim().Length > 0)
            //    {
            //        int pos = itemStr.IndexOf(':');
            //        string campo = itemStr.Substring(0, pos);
            //        string valor = "";
            //        if (((itemStr.Length - 1) - campo.Length) == 0)
            //        {
            //            valor = itemStr.Substring(pos, (itemStr.Length - 1) - campo.Length);
            //        }
            //        else
            //        {
            //            valor = itemStr.Substring(pos + 1, (itemStr.Length - 1) - campo.Length);
            //        }

            //        if (campo == "codigoCliente")
            //        {
            //            codigoCli = valor.ToString();
            //        }
            //    }
            //}

            //return codigoCli;
        }

        private void cargarLotesAMaterial(PedidoBE objPedido)
        {
            //recoremos los detalles del pedido para asiganr el lote
            foreach (DetalleBE objItem in objPedido.Detalle)
            {
                //SE COMENTO 07042013 NO DEBE ELMINAR REPARTOS
                if (!string.IsNullOrEmpty(objItem.TipoPosAnt) && (!op.Equals("copiar")))
                {
                    if (!objItem.TipoPosAnt.ToUpper().Equals(objItem.TipoPosicion.ToUpper().Trim()))
                    {
                        objItem.Repartos.Clear();
                        objItem.TipoPosAnt = objItem.TipoPosicion.ToUpper().Trim();
                    }
                }
                string numPedidoModif = string.Empty;
                string numPosModif = string.Empty;
                if (op.ToLower().Equals("editar") || op.ToLower().Equals("ver"))
                {
                    numPedidoModif = objPedido.NumPedido;
                    numPosModif = objItem.Posicion;
                }

                this._lvLstCentros = new List<GenericBE>();
                this._lvLstAlmacenes = new List<GenericBE>();
                this._lvLstLotes = new List<GenericBE>();

                decimal pCantTot = objPedido.Detalle.Where(X => (Int16.Parse(X.Posicion) < Int16.Parse(objItem.Posicion))
                   && (X.CodMaterial == objItem.CodMaterial)
                   && (X.CodAlmacen == objItem.CodAlmacen)
                   && (X.CodCentro == objItem.CodCentro)
                   && (X.CodLote == objItem.CodLote)).Sum(Y => Y.Cantidad);
                pCantTot += objItem.Cantidad;

                this._lvLstCAL = ParametroBC.Instance.getDataLotes(objItem.Material.CodMaterial, pCantTot, string.Empty,
                            string.Empty, string.Empty, numPedidoModif, numPosModif, objPedido.OrgVentas, objPedido.CanalDist);
                _lvCALSessKey = _lvPreCALSessKey + objItem.PosicionCorto;
                //-- distribuir en lstCentro, lstAlmacen, lstLotes
                this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                string codcentro = objItem.CodCentro;
                try
                {

                    if (this._lvLstCentros.Count > 0)
                    {
                        if (objPedido.OrgVentas == "1000")
                        {
                            objItem.CodCentro = "9110";
                        }
                        else if (objPedido.OrgVentas == "2000")
                        {
                            objItem.CodCentro = "2010";
                        }
                        if (objPedido.CodOficina == "1060")
                        {
                            objItem.CodCentro = "1060";
                        }
                    }
                }
                catch { }
                //si ya había un centro seleccionado, lo mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodCentro != null)
                    {
                        if (codcentro.Trim() != "")
                        {
                            objItem.CodCentro = codcentro;
                        }
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, string.Empty, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                //buscar almacenes según el material y centro seleccionado
                string codalmacen = objItem.CodAlmacen;
                try
                {
                    if (this._lvLstAlmacenes.Count > 0)
                    {
                        objItem.CodAlmacen = "0001";
                    }
                }
                catch { }
                //si había un almacen seleccionado, se mantiene seleccionado
                try
                {
                    if (objItem != null && objItem.CodAlmacen != null)
                    {
                        if (codalmacen.Trim() != "")
                        {
                            objItem.CodAlmacen = codalmacen;
                        }
                    }
                    else
                    {
                        //-- distribuir en lstCentro, lstAlmacen, lstLotes
                        this.DistribuirCAL(objItem.CodCentro, objItem.CodAlmacen, this._lvLstCAL, ref this._lvLstCentros, ref this._lvLstAlmacenes, ref this._lvLstLotes);
                        //-- Fin Cambio 08.04.2011
                    }
                }
                catch { }

                decimal dCantidad = 0m;
                try
                {
                    dCantidad = Convert.ToDecimal(objItem.Cantidad);
                }
                catch { }
                string pCodLoteOptimo = "";
                //--- si no es tipo de doc sin lote, no trae la lista de lotes disponibles
                if (!ParametroBC.Instance.esTipoSinLote(objPedido.CodTipoDoc))
                {
                    objItem.CodAlmacen = objItem.CodAlmacen;
                    objItem.Cantidad = dCantidad;
                }
                //adicionando un item vacio a los lotes
                string codlote = objItem.CodLote;
                GenericBE objVacio = new GenericBE(); objVacio.Codigo = ""; objVacio.Descripcion = "- ninguno -";
                this._lvLstLotes.Add(objVacio);
                try
                {
                    if (!ParametroBC.Instance.esTipoOferta(objPedido.CodTipoDoc))
                    {
                        objItem.CodLote = _lvLstLotes[0].Codigo;//lote óptimo siempre en primera posición
                    }
                }
                catch { }
                //selecciono lote que venía seleccionado
                try
                {
                    if (objItem != null && !string.IsNullOrEmpty(objItem.CodLote))
                    {
                        if (codlote.Trim() != "")
                        {
                            objItem.CodLote = codlote;
                        }
                    }
                }
                catch { }
                //--- salida de validación tipo posición...
                //-- Cambiar TipoPosición según tipo de material NA1, NA2, NA3 :: Requerimiento 06.04.2011
                //Falta añadir condición para que haga esta validación
                if (ParametroBC.Instance.esTipoX(objPedido.CodTipoDoc, "docValiZ"))
                {
                    if (objItem != null)
                    {
                        if (objItem.Material == null)
                        {
                            objItem.Material = MaterialBC.Instance.leerMaterial(objItem.CodMaterial, objPedido.OrgVentas, objPedido.CanalDist);
                        }
                        if (!ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoCabCombo") && !ParametroBC.Instance.esTipoX(objItem.TipoPosicion, "TipoPosCombo"))
                        {
                            if (objPedido.OrgVentas == "1000" && (objPedido.CodTipoDoc == "Z001" || objPedido.CodTipoDoc == "Z003")) //nueva logica solo para DECOR CENTER y estas 2 clases de documento
                            {
                                if (objItem.Material.TipoMaterial == "NA2" || objItem.Material.TipoMaterial == "NA3")
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (_lvLstLotes.Count > 1)
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                    //else
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                }
                                else if (objItem.Material.TipoMaterial == "NA" || objItem.Material.TipoMaterial == "NA1" || objItem.Material.TipoMaterial == "IM" || objItem.Material.TipoMaterial == "IM1")
                                {
                                    objItem.TipoPosicion = "Z010";
                                }
                            }
                            else
                            {
                                //-- Si es NA2
                                if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA2"))
                                {
                                    //comentado a peticion de tomás (llamó roberto) 26.07.2012 @@@@
                                    //if (this._lvLstLotes.Count <= 1) // Si solo hay un lote, no hay stock (es el item que dice "ninguno")
                                    //{
                                    //    objItem.TipoPosicion = "ZE10";
                                    //}
                                    //else if (this._lvLstLotes.Count > 1)// && objItem.TipoPosicion == "ZE10")
                                    //{
                                    //    objItem.TipoPosicion = "Z010";
                                    //}
                                }
                                else if (ParametroBC.Instance.esTipoX(objItem.Material.TipoMaterial, "NA3")) //-- NA3 siempre con ZE10 - Con o Sin Stock
                                {
                                    if (!objItem.TipoPosicion.Equals("Z010"))
                                    {
                                        objItem.TipoPosicion = "ZE10";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        private PedidoBE Convertir_Cadena_a_Pedido2(string _CabPedido, string _interlocutores, string _repartos,
            string _descuentos, string _detMateriales)
        {
            PedidoBE _objP = new PedidoBE();

            List<PedidoBE> objPedido = JsonConvert.DeserializeObject<List<PedidoBE>>(_CabPedido, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
            List<DetalleBE> lstMater = JsonConvert.DeserializeObject<List<DetalleBE>>(_detMateriales);
            List<DescuentoBE> lstDscto = JsonConvert.DeserializeObject<List<DescuentoBE>>(_descuentos);
            List<RepartoBE> lstRepar = JsonConvert.DeserializeObject<List<RepartoBE>>(_repartos);
            List<InterlocutorBE> lstInter = JsonConvert.DeserializeObject<List<InterlocutorBE>>(_interlocutores);
            List<MaterialBE> lstDetMater = JsonConvert.DeserializeObject<List<MaterialBE>>(_detMateriales);
            List<ClienteBE> lstCliTmp = JsonConvert.DeserializeObject<List<ClienteBE>>(_interlocutores);
            List<PersonaBE> lstPerTmp = JsonConvert.DeserializeObject<List<PersonaBE>>(_interlocutores);

            foreach (InterlocutorBE item in lstInter)
            {
                foreach (ClienteBE itemc in lstCliTmp)
                {
                    if (item.Funcion == itemc.Funcion)
                    {
                        item.Cliente = itemc;
                        break;
                    }
                }

                foreach (PersonaBE itemp in lstPerTmp)
                {
                    if (item.Funcion == itemp.Funcion)
                    {
                        item.Persona = itemp;
                        break;
                    }
                }
            }

            #region Descuentos

            #region Eliminar
            //List<DescuentoBE> lstDescue = new List<DescuentoBE>();
            //DescuentoBE objDescue = new DescuentoBE();

            //string _matPosicion = "";
            //_descuentos = _descuentos.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("]", "");

            //string[] objDesStr = _descuentos.Split('}');
            //int x = 0;
            //foreach (var item in objDesStr)
            //{
            //    if (item != "")
            //    {
            //        string _item = "";
            //        if (x == 0)
            //        {
            //            _item = item.Substring(0, item.Length);
            //        }
            //        else
            //        {
            //            _item = item.Substring(1, item.Length - 1);
            //        }
            //        objDescue = new DescuentoBE();

            //        string[] obj = _item.Split(',');

            //        foreach (var itemStr in obj)
            //        {
            //            int pos = itemStr.IndexOf(':');
            //            string campo = itemStr.Substring(0, pos);
            //            string valor = "";
            //            if (((itemStr.Length - 1) - campo.Length) == 0)
            //            {
            //                valor = itemStr.Substring(pos, (itemStr.Length - 1) - campo.Length);
            //            }
            //            else
            //            {
            //                valor = itemStr.Substring(pos + 1, (itemStr.Length - 1) - campo.Length);
            //            }

            //            if (campo == "matPosicion")
            //            {
            //                _matPosicion = valor.Trim();
            //                objDescue.Posicion = valor.Trim();
            //            }
            //            else if (campo == "Posicion")
            //            {
            //                objDescue.Posicion = _matPosicion;
            //            }
            //            else if (campo == "Condicion")
            //            {
            //                objDescue.Condicion = valor.Trim();
            //            }
            //            else if (campo == "Importe")
            //            {
            //                objDescue.Importe = Convert.ToDecimal(valor.Trim());
            //            }
            //            else if (campo == "ImporteAnterior")
            //            {
            //                objDescue.ImporteAnterior = Convert.ToDecimal(valor.Trim());
            //            }
            //            else if (campo == "Moneda")
            //            {
            //                objDescue.Moneda = valor.Trim();
            //            }
            //            else if (campo == "Valor")
            //            {
            //                objDescue.Valor = valor.Trim() == "" ? 0m : Convert.ToDecimal(valor.Trim());
            //            }
            //        }
            //        lstDescue.Add(objDescue);
            //    }
            //    x++;
            //}
            #endregion
            
            foreach (DetalleBE itemD in lstMater)
            {
                foreach (DescuentoBE item in lstDscto)
                {
                    if (itemD.PosicionCorto.TrimStart('0') == item.matPosicion)
                    {
                        if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoDecorPorc"))
                        {
                            itemD.DctoDecorPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoAdicionalPorc"))
                        {
                            itemD.DctoAdicionalPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoEstadisticoPorc"))
                        {
                            itemD.DctoEstadisticoPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaPorc"))
                        {
                            itemD.DctoGerenciaPorc = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctoGerenciaMonto"))
                        {
                            itemD.DctoGerenciaMonto = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondZD06"))
                        {
                            itemD.DctoZD06 = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctos")) //ZD09
                        {
                            itemD.DctoGenerico = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondZD11"))
                        {
                            itemD.DctoZD11 = item;
                        }
                        else if (item.Condicion == ParametroBC.Instance.getParamValue("CondDctosAdicional"))
                        {
                            itemD.DsctoAdicionalZD12 = item;
                        }
                        else if (item.Condicion == "ZP08")
                        {
                            itemD.PreZP08 = item;
                        }
                        else if (item.Condicion == "ZP01")
                        {
                            itemD.Diferencia = item;
                        }
                    }
                }
            }
            #endregion

            #region Repartos
            //primero eliminamos los repartos que vienen por defecto en la lista de material
            for (int i = 0; i < lstMater.Count; i++)
            {
                lstMater[i].Repartos.RemoveAt(0);
                //lstMater[i].Repartos.Clear();
            }

            foreach (DetalleBE itemD in lstMater)
            {
                foreach (RepartoBE itemR in lstRepar)
                {
                    if (itemD.PosicionCorto.TrimStart('0') == itemR.matPosicion.TrimStart('0'))
                    {
                        itemD.Repartos.Add(itemR);
                        break;
                    }
                }
            }

            #region Eliminar
            //DetalleBE objD;
            //List<RepartoBE> lstRepart = new List<RepartoBE>();
            //RepartoBE objRepart = new RepartoBE();

            //_repartos = _repartos.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("]", "");

            //string[] objRepStr = _repartos.Split('}');
            //int y = 0;
            //foreach (var item in objRepStr)
            //{
            //    if (item != "")
            //    {
            //        string _item = "";
            //        if (y == 0)
            //        {
            //            _item = item.Substring(0, item.Length);
            //        }
            //        else
            //        {
            //            _item = item.Substring(1, item.Length - 1);
            //        }
            //        objRepart = new RepartoBE();

            //        string[] obj = _item.Split(',');

            //        foreach (var itemStr in obj)
            //        {
            //            int pos = itemStr.IndexOf(':');
            //            string campo = itemStr.Substring(0, pos);
            //            string valor = "";
            //            if (((itemStr.Length - 1) - campo.Length) == 0)
            //            {
            //                valor = itemStr.Substring(pos, (itemStr.Length - 1) - campo.Length);
            //            }
            //            else
            //            {
            //                valor = itemStr.Substring(pos + 1, (itemStr.Length - 1) - campo.Length);
            //            }

            //            if (campo == "matPosicion")
            //            {
            //                _matPosicion = valor.Trim();
            //            }
            //            else if (campo == "TipoReparto")
            //            {
            //                objRepart.TipoReparto = valor.Trim();
            //            }
            //            else if (campo == "Pos")
            //            {
            //                objRepart.Pos = valor.Trim();
            //            }
            //            else if (campo == "PosCorto")
            //            {
            //                //objRepart.PosCorto = valor.Trim();
            //            }
            //            else if (campo == "FechaEntrega")
            //            {
            //                objRepart.FechaEntrega = Convert.ToDateTime(valor.Trim().Substring(0, 10));
            //            }
            //            else if (campo == "CantPed")
            //            {
            //                objRepart.CantPed = Convert.ToDecimal(valor.Trim());
            //            }
            //            else if (campo == "CantConf")
            //            {
            //                objRepart.CantConf = Convert.ToDecimal(valor.Trim());
            //            }
            //            else if (campo == "CodUMedida")
            //            {
            //                objRepart.CodUMedida = valor.Trim();
            //            }
            //        }

            //        foreach (DetalleBE itemD in lstMater)
            //        {
            //            if (itemD.PosicionCorto.TrimStart('0') == _matPosicion)
            //            {
            //                itemD.Repartos.Add(objRepart);
            //            }
            //        }
            //    }
            //    y++;
            //}
            #endregion
            
            #endregion

            #region Interlocutores(Verificar y luego Borrar)
            //string _funcion = "";
            //string _codigoCliente = "";
            //string _descripcionCliente = "";
            //string _direccion = "";
            //string _codigoPostal = "";
            //string _ciudad = "";
            //string _telefono = "";
            //string _ruc = "";
            //string _mail = "";
            //string _distrito = "";
            //string _codigoVendedor1 = ""; //lo sacamos de objPedido o puede ser usuarioweb o del combo.
            //string _nombreVendedor1 = ""; //lo sacamos de objPedido o puede ser usuarioweb o del combo.
            //string _codigoVendedorWeb = "";
            //string _nombreVendedorWeb = "";
            //string _codigoVendedor2 = "";
            //string _codigoVendedor3 = "";
            //string _codigoProfesional = "";
            //string _nombreProfesional = "";
            //string _direccionProfesional = "";
            //string _codigoPostalProfesional = "";
            //string _ciudadPostalProfesional = "";
            //string _telefonoProfesional = "";
            //string _codigoProfesional2 = "";
            //string _nombreProfesional2 = "";
            //string _direccionProfesional2 = "";
            //string _codigoPostalProfesional2 = "";
            //string _ciudadPostalProfesional2 = "";
            //string _telefonoProfesional2 = "";
            //_interlocutores = _interlocutores.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("]", "");
            ////elimino interlocutores antes de cargarlos
            //for (int i = lstInter.Count - 1; i >= 0; i--)
            //{
            //    lstInter.RemoveAt(i);
            //}
            //string[] objIntStr = _interlocutores.Split('}');
            //foreach (var item in objIntStr)
            //{
            //    if (item != "")
            //    {
            //        string _item = item.Substring(0, item.Length);
            //        string[] obj = _item.Split(',');

            //        foreach (var itemStr in obj)
            //        {
            //            if (itemStr != "")
            //            {
            //                int pos = itemStr.IndexOf(':');
            //                string campo = itemStr.Substring(0, pos);
            //                string valor = "";
            //                if (((itemStr.Length - 1) - campo.Length) == 0)
            //                {
            //                    valor = itemStr.Substring(pos, (itemStr.Length - 1) - campo.Length);
            //                }
            //                else
            //                {
            //                    valor = itemStr.Substring(pos + 1, (itemStr.Length - 1) - campo.Length);
            //                }
            //                if (campo == "Funcion")
            //                {
            //                    _funcion = valor.Trim();
            //                }
            //                else if (campo == "Codigo")
            //                {
            //                    _codigoCliente = valor.Trim();
            //                }
            //                else if (campo == "Ruc")
            //                {
            //                    if (valor == "null")
            //                    {
            //                        _ruc = ""; // valor.Trim();
            //                    }
            //                    else
            //                    {
            //                        _ruc = valor.Trim();
            //                    }
            //                }
            //                else if (campo == "Descripcion")
            //                {
            //                    _descripcionCliente = valor.Trim();
            //                }
            //                else if (campo == "Titulo")
            //                {

            //                }
            //                else if (campo == "Direccion")
            //                {
            //                    _direccion = valor.Trim();
            //                }
            //                else if (campo == "Ciudad")
            //                {
            //                    _ciudad = valor.Trim();
            //                }
            //                else if (campo == "Pais")
            //                {

            //                }
            //                else if (campo == "CodigoPostal")
            //                {
            //                    _codigoPostal = valor.Trim();
            //                }
            //                else if (campo == "Distrito")
            //                {
            //                    _distrito = valor.Trim();
            //                }
            //                else if (campo == "Telefono")
            //                {
            //                    _telefono = valor.Trim();
            //                }
            //                else if (campo == "Mail")
            //                {
            //                    _mail = valor.Trim();
            //                }
            //                else if (campo == "PersonaFisica")
            //                {

            //                }
            //                else if (campo == "Eventual")
            //                {

            //                }
            //                else if (campo == "CodPersona")
            //                {
            //                    _codigoProfesional = valor.Trim();
            //                    _codigoProfesional2 = valor.Trim();
            //                    _codigoVendedor1 = valor.Trim();
            //                    _codigoVendedor2 = valor.Trim();
            //                    _codigoVendedor3 = valor.Trim();
            //                    _codigoVendedorWeb = valor.Trim();
            //                }
            //                else if (campo == "Nombre")
            //                {
            //                    _nombreProfesional = valor.Trim();
            //                    _nombreProfesional2 = valor.Trim();
            //                    _nombreVendedor1 = valor.Trim();
            //                    _nombreVendedorWeb = valor.Trim();
            //                }
            //                else if (campo == "Apellido")
            //                {

            //                }
            //                else if (campo == "Iniciales")
            //                {

            //                }
            //                else if (campo == "ApeSoltero")
            //                {

            //                }
            //                else if (campo == "DescripcionP")
            //                {
            //                    _nombreProfesional = valor.Trim();
            //                    _nombreProfesional2 = valor.Trim();
            //                }
            //                else if (campo == "Dni")
            //                {

            //                }
            //                else if (campo == "TelefonoP")
            //                {
            //                    _telefonoProfesional = valor.Trim();
            //                    _telefonoProfesional2 = valor.Trim();
            //                }
            //            }
            //        }

            //        if (_funcion == ParametroBC.Instance.getParamValue("IlocCliente"))
            //        {
            //            if (_codigoCliente != "")
            //            {
            //                InterlocutorBE objSolicitante = new InterlocutorBE();
            //                objSolicitante.Funcion = ParametroBC.Instance.getParamValue("IlocCliente");
            //                objSolicitante.Cliente.Codigo = _codigoCliente;
            //                objSolicitante.Cliente.Descripcion = _descripcionCliente;
            //                objSolicitante.Cliente.Direccion = _direccion;
            //                objSolicitante.Cliente.CodigoPostal = _codigoPostal;
            //                objSolicitante.Cliente.Ciudad = _ciudad;
            //                objSolicitante.Cliente.Telefono = _telefono;
            //                objSolicitante.Cliente.Ruc = _ruc;
            //                objSolicitante.Cliente.Mail = _mail;
            //                objSolicitante.Cliente.Distrito = _distrito;

            //                lstInter.Add(objSolicitante);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocDestMerc"))
            //        {
            //            if (_codigoCliente != "")
            //            {
            //                InterlocutorBE objDestMercaderia = new InterlocutorBE();
            //                objDestMercaderia.Funcion = ParametroBC.Instance.getParamValue("IlocDestMerc");
            //                objDestMercaderia.Cliente.Codigo = _codigoCliente;
            //                objDestMercaderia.Cliente.Descripcion = _descripcionCliente;
            //                objDestMercaderia.Cliente.Direccion = _direccion;
            //                objDestMercaderia.Cliente.CodigoPostal = _codigoPostal;
            //                objDestMercaderia.Cliente.Ciudad = _ciudad;
            //                objDestMercaderia.Cliente.Telefono = _telefono;

            //                lstInter.Add(objDestMercaderia);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocDestFact"))
            //        {
            //            if (_codigoCliente != "")
            //            {
            //                InterlocutorBE objDestFactura = new InterlocutorBE();
            //                objDestFactura.Funcion = ParametroBC.Instance.getParamValue("IlocDestFact");
            //                objDestFactura.Cliente.Codigo = _codigoCliente;
            //                objDestFactura.Cliente.Descripcion = _descripcionCliente;
            //                objDestFactura.Cliente.Direccion = _direccion;
            //                objDestFactura.Cliente.CodigoPostal = _codigoPostal;
            //                objDestFactura.Cliente.Ciudad = _ciudad;
            //                objDestFactura.Cliente.Telefono = _telefono;

            //                lstInter.Add(objDestFactura);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocResPago"))
            //        {
            //            if (_codigoCliente != "")
            //            {
            //                InterlocutorBE objResPago = new InterlocutorBE();
            //                objResPago.Funcion = ParametroBC.Instance.getParamValue("IlocResPago");
            //                objResPago.Cliente.Codigo = _codigoCliente;
            //                objResPago.Cliente.Descripcion = _descripcionCliente;
            //                objResPago.Cliente.Direccion = _direccion;
            //                objResPago.Cliente.CodigoPostal = _codigoPostal;
            //                objResPago.Cliente.Ciudad = _ciudad;
            //                objResPago.Cliente.Telefono = _telefono;
            //                objResPago.Cliente.Ruc = _ruc;

            //                lstInter.Add(objResPago);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocAgTrans"))
            //        {
            //            if (_codigoCliente != "")
            //            {
            //                InterlocutorBE objAgTransporte = new InterlocutorBE();
            //                objAgTransporte.Funcion = ParametroBC.Instance.getParamValue("IlocAgTrans");
            //                objAgTransporte.Cliente.Codigo = _codigoCliente == "" ? "" : _codigoCliente.PadLeft(10, '0');
            //                objAgTransporte.Cliente.Descripcion = _descripcionCliente;
            //                objAgTransporte.Cliente.Direccion = _direccion;
            //                objAgTransporte.Cliente.CodigoPostal = _codigoPostal;
            //                objAgTransporte.Cliente.Ciudad = _ciudad;
            //                objAgTransporte.Cliente.Telefono = _telefono;
            //                objAgTransporte.Cliente.Ruc = _ruc;

            //                lstInter.Add(objAgTransporte);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocVendedor1"))
            //        {
            //            if (_codigoVendedor1 != "")
            //            {
            //                InterlocutorBE objEncargadoComercial = new InterlocutorBE();
            //                objEncargadoComercial.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor1");
            //                objEncargadoComercial.Persona.CodPersona = _codigoVendedor1;
            //                objEncargadoComercial.Persona.Descripcion = _nombreVendedor1;

            //                lstInter.Add(objEncargadoComercial);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocVendedor2"))
            //        {
            //            InterlocutorBE objVendedorWeb = new InterlocutorBE();
            //            objVendedorWeb.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor2");
            //            objVendedorWeb.Persona.CodPersona = Request.Params["CodigoVendedor"]; // _codigoVendedorWeb;
            //            objVendedorWeb.Persona.Descripcion = Request.Params["Descripcion"]; // _nombreVendedorWeb;

            //            lstInter.Add(objVendedorWeb);
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocVendedor3"))
            //        {
            //            if (_codigoVendedor2 != "")
            //            {
            //                InterlocutorBE objVendedor2 = new InterlocutorBE();
            //                objVendedor2.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor3");
            //                objVendedor2.Persona.CodPersona = _codigoVendedor2;

            //                lstInter.Add(objVendedor2);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocVendedor4"))
            //        {
            //            if (_codigoVendedor3 != "")
            //            {
            //                InterlocutorBE objVendedor3 = new InterlocutorBE();
            //                objVendedor3.Funcion = ParametroBC.Instance.getParamValue("IlocVendedor4");
            //                objVendedor3.Persona.CodPersona = _codigoVendedor3;

            //                lstInter.Add(objVendedor3);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocProfesional"))
            //        {
            //            if (_codigoProfesional != "")
            //            {
            //                InterlocutorBE objProfesional = new InterlocutorBE();
            //                objProfesional.Funcion = ParametroBC.Instance.getParamValue("IlocProfesional");
            //                objProfesional.Persona.CodPersona = _codigoProfesional;
            //                objProfesional.Persona.Descripcion = _nombreProfesional;
            //                objProfesional.Cliente.Direccion = _direccion;
            //                objProfesional.Cliente.CodigoPostal = _codigoPostal;
            //                objProfesional.Cliente.Ciudad = _ciudad;
            //                objProfesional.Cliente.Telefono = _telefono;

            //                lstInter.Add(objProfesional);
            //            }
            //        }
            //        else if (_funcion == ParametroBC.Instance.getParamValue("IlocProfesional2"))
            //        {
            //            if (_codigoProfesional2 != "")
            //            {
            //                InterlocutorBE objProfesional2 = new InterlocutorBE();
            //                objProfesional2.Funcion = ParametroBC.Instance.getParamValue("IlocProfesional2");
            //                objProfesional2.Persona.CodPersona = _codigoProfesional2;
            //                objProfesional2.Persona.Descripcion = _nombreProfesional2;
            //                objProfesional2.Cliente.Direccion = _direccion;
            //                objProfesional2.Cliente.CodigoPostal = _codigoPostal;
            //                objProfesional2.Cliente.Ciudad = _ciudad;
            //                objProfesional2.Cliente.Telefono = _telefono;
            //                lstInter.Add(objProfesional2);
            //            }
            //        }
            //    }
            //}
            #endregion

            #region Textos
            List<TextoBE> lstTexto = new List<TextoBE>();
            List<TextoBE> lstTextoTmp = new List<TextoBE>();
            TextoBE objtxt = new TextoBE();
            lstTexto = JsonConvert.DeserializeObject<List<TextoBE>>(_CabPedido);

            ////leemos los textos de la cadena _CabPedido
            //_CabPedido = _CabPedido.Replace("[", "").Replace("\"", "").Replace("{", "").Replace("}", "").Replace("]", "");

            //string[] objCab = _CabPedido.Split(',');
            
            //foreach (var itemStr in objCab)
            //{
            //    int pos = itemStr.IndexOf(':');
            //    string campo = itemStr.Substring(0, pos);
            //    string valor = "";
            //    if (((itemStr.Length - 1) - campo.Length) == 0)
            //    {
            //        valor = itemStr.Substring(pos, (itemStr.Length - 1) - campo.Length);
            //    }
            //    else
            //    {
            //        valor = itemStr.Substring(pos + 1, (itemStr.Length - 1) - campo.Length);
            //    }
            foreach (TextoBE item in lstTexto)
            {
                if (item.textoAtencion != "" )
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP01";
                    objtxt.Descripcion = item.textoAtencion.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoObsAdministrativas != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP05";
                    objtxt.Descripcion = item.textoObsAdministrativas.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoRefFactura != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP06";
                    objtxt.Descripcion = item.textoRefFactura.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoRefDireccion != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = "ZP07";
                    objtxt.Descripcion = item.textoRefDireccion.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoContacto != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoContactoVisita");
                    objtxt.Descripcion = item.textoContacto.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoDatosAdicionalesCliente != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDatosAdicVisita");
                    objtxt.Descripcion = item.textoDatosAdicionalesCliente.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoTelefonos != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoTelefonoVisita");
                    objtxt.Descripcion = item.textoTelefonos.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoDescripcionVisita != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDescripVisita");
                    objtxt.Descripcion = item.textoDescripcionVisita.Trim();
                    lstTextoTmp.Add(objtxt);
                }
                 if (item.textoResultadoVisita != "")
                {
                    objtxt = new TextoBE();
                    objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoResultadoVisita");
                    objtxt.Descripcion = item.textoResultadoVisita.Trim();
                    lstTextoTmp.Add(objtxt);
                }
            }
            //    if (campo == "textoAtencion")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = "ZP01";
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoObsAdministrativas")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = "ZP05";
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoRefFactura")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = "ZP06";
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoRefDireccion")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = "ZP07";
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoContacto")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoContactoVisita");
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoDatosAdicionalesCliente")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDatosAdicVisita");
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoTelefonos")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoTelefonoVisita");
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoDescripcionVisita")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoDescripVisita");
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //    else if (campo == "textoResultadoVisita")
            //    {
            //        objtxt = new TextoBE();
            //        objtxt.CodTexto = ParametroBC.Instance.getParamValue("TextoResultadoVisita");
            //        objtxt.Descripcion = valor.Trim();
            //        lstTexto.Add(objtxt);
            //    }
            //}
            #endregion

            //Precio del detalle ZP00
            foreach (DetalleBE item in lstMater)
            {
                foreach (DescuentoBE itemD in lstDscto)
                {
                    if (item.PosicionCorto.TrimStart('0') == itemD.matPosicion)
                    {
                        if (itemD.Condicion == "ZP00" || itemD.Condicion == "ZP07")
                        {
                            item.Precio = itemD;
                        }
                        else if (itemD.Condicion == "ZP03")
                        {
                            item.Precio = itemD;
                        }
                    }
                }
            }

            //asignamos material a detalle
            foreach (DetalleBE item in lstMater)
            {
                foreach (MaterialBE itemM in lstDetMater)
                {
                    if (item.CodMaterialCorto == itemM.CodMaterial)
                    {
                        item.Material = itemM;
                        break;
                    }
                }
            }

            objPedido[0].Textos = lstTextoTmp;
            //objPedido[0].Mail = lstInter.Find(z => z.Funcion == "AG").Cliente.Mail;
            _objP = objPedido[0];
            _objP.Detalle = lstMater;
            _objP.Interlocutores = lstInter;

            return _objP;
        }

        private List<EnlaceMaterialBE> CargarMaterialesAdicionales(string matAdic)
        {
            List<EnlaceMaterialBE> lstMatAd = new List<EnlaceMaterialBE>();
            return lstMatAd = JsonConvert.DeserializeObject<List<EnlaceMaterialBE>>(matAdic);
        }
    }
}